package main

import (
	"fmt"
	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
	"log"
)

// viper 配置管理 go get github.com/spf13/viper
func main() {
	// 完整配置文件名
	viper.SetConfigFile("conf.yaml")
	viper.SetConfigName("conf")
	viper.SetConfigType("yaml")

	// 添加配置搜索目录, 在指定目录搜索conf.yaml配置文件
	// viper.AddConfigPath("/etc/profile/viper")
	// viper.AddConfigPath("$HOME/.viper")
	viper.AddConfigPath("./conf")
	viper.AddConfigPath(".")

	// 读取解析配置文件
	if err := viper.ReadInConfig(); err != nil {
		if notFoundErr, ok := err.(viper.ConfigFileNotFoundError); ok {
			log.Printf("config.yaml not found! %v", notFoundErr)
			return
		} else {
			panic(err)
		}
	}

	name := viper.GetString("name")
	port := viper.GetInt("port")
	mysql := viper.GetStringMapString("mysql")
	fmt.Printf("%s, %d, %v\n",
		name, port, mysql)

	// 配置文件保存
	// viper.WriteConfigAs("config.yaml")

	// 配置文件监听
	viper.WatchConfig()
	viper.OnConfigChange(func(e fsnotify.Event) {
		fmt.Println(e)
	})

	// 从任意的io.Reader读取配置项
	// viper.ReadConfig(in io.Reader)
}
